package org.blogwu.learn.jvmlearn.class1;

/**
 * Created by Administrator on 2018/6/20.
 * 常量在编译阶段会存入到调用这个方法所在的常量池中,
 * 本质上,调用类并没有直接引用到定义常量的类,因此并不会触发
 * 定义常量的类的初始化,
 * 注意: 这里指的是将常量存放到了MyTest2的常量池中,之后MyTest2和MyParent2没任何关系
 * 甚至,我们可以将MyParent2的class文件删除
 * <p>
 * <p>
 * 助记符
 * ldc:表示将int,float 或是String类型的常量值从常量池中推送至栈顶
 * bipush:表示将单字节(-128-127) 的常量值推送至栈顶
 * sipush:表示将一个短整型常量值(-32768 - 32767)推送至栈顶
 * iconst_1:表示将int类型1推送至栈顶  (iconst_m1  --- iconst_5)
 */
public class MyTest2 {
    public static void main(String[] args) {
        System.out.println(MyParent2.str);
    }
}


class MyParent2 {

    //此值在编译时可以确定
    public static String str = "hello world";

    public static final short i = 8;

    public static final int it = 1;

    public static final long il = 32768;

    static {
        System.out.printf("MyParent2 static block");
    }
}